package de.pmg_grandma;

import interfaces.AbstractWish;

import java.util.HashMap;

import enums.WishType;
import model.ShoppingList;
import model.Stock;
import model.Model;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class StockActivity extends Activity {

	private Stock stock;
	private ShoppingList shoppingList;
	private Model model;
	private HashMap<Integer, String> tablerowMap;
	private ImageView imageView;
	private TextView textView;	
	private TableRow tableRow;

	public StockActivity() {
		model = Model.getInstance();
		stock = model.getStock();
		shoppingList = model.getShoppingLIst();		//Einkaufsliste für aktuelle Wünsche
		tablerowMap = new HashMap<Integer, String>();
		fillMaps();
	}

	private void fillMaps() {

		tablerowMap.put(R.id.tableRow_stock_broetchen, 		Model.LEBENSMITTEL_BROETCHEN);
		tablerowMap.put(R.id.tableRow_stock_bockwurst, 		Model.LEBENSMITTEL_BOCKWURST);
		tablerowMap.put(R.id.tableRow_stock_brot, 			Model.LEBENSMITTEL_BROT);
		tablerowMap.put(R.id.tableRow_stock_erbsen, 		Model.LEBENSMITTEL_ERBSEN);
		tablerowMap.put(R.id.tableRow_stock_fleisch, 		Model.LEBENSMITTEL_FLEISCH);
		tablerowMap.put(R.id.tableRow_stock_griess, 		Model.LEBENSMITTEL_GRIESS);
		tablerowMap.put(R.id.tableRow_stock_gurke, 			Model.LEBENSMITTEL_GURKE);
		tablerowMap.put(R.id.tableRow_stock_haferflocken, 	Model.LEBENSMITTEL_HAFERFLOCKEN);
		tablerowMap.put(R.id.tableRow_stock_kartoffeln, 	Model.LEBENSMITTEL_KARTOFFELN);
		tablerowMap.put(R.id.tableRow_stock_tomate, 		Model.LEBENSMITTEL_TOMATE);
		tablerowMap.put(R.id.tableRow_stock_wasser, 		Model.LEBENSMITTEL_WASSER);
		tablerowMap.put(R.id.tableRow_stock_milch, 			Model.LEBENSMITTEL_MILCH);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Model.getInstance().inAppFocus = true;
		Model.getInstance().getShoppingLIst().update();
		setContentView(R.layout.activity_stock);

		for (Integer integerKey : tablerowMap.keySet()) {
			tableRow = (TableRow) findViewById(integerKey);
			//ImageView für Warnhinweiss
			imageView = (ImageView) tableRow.getChildAt(1);
			//TextView für Zutaten
			textView = (TextView) tableRow.getChildAt(0);
			//Füge Menge der Zutat zum Text
			textView.setText("(" + stock.getCountOf(tablerowMap.get(integerKey)) + ") " + textView.getText());

			if (stock.getCountOf(tablerowMap.get(integerKey)) < stock.getMaxValue()) {
				// Anzahl der Lebensmiteln ist kritisch
				if (shoppingList.getCountOf(tablerowMap.get(integerKey)) > 0) {
					// Schaltfläche mit Icon versehen
					imageView.setVisibility(View.VISIBLE);
					tableRow.setEnabled(true);
					System.out.println(tablerowMap.get(integerKey) + " nicht voll");
				}
				else {
					imageView.setVisibility(View.INVISIBLE);
					tableRow.setEnabled(true);
				}
			}

			// Lager ist voll, einkaufen nicht mehr nötig
			else if (stock.getCountOf(tablerowMap.get(integerKey)) == stock.getMaxValue()) {
				// Schaltfläche ausgrauen
				tableRow.setEnabled(false);
				System.out.println(tablerowMap.get(integerKey) + " voll");
			}
		}
	}

	public void onButtonClick(View view) {
		String stringKey = tablerowMap.get(view.getId());
		imageView = (ImageView)((TableRow) view).getChildAt(1);

		if (stock.getCountOf(stringKey) < stock.getMaxValue()) {
			Model.getInstance().buy(stringKey, 1);
			textView = (TextView)((TableRow) view).getChildAt(0);
			textView.setText("(" + stock.getCountOf(stringKey) + ") " + stringKey);
			// Anzahl der Lebensmiteln ist kritisch
			if (shoppingList.getCountOf(stringKey) > 0) {
				// Schaltfläche mit Icon versehen
				imageView.setVisibility(View.VISIBLE);
				tableRow.setEnabled(true);
			}
			else {
				imageView.setVisibility(View.INVISIBLE);
				tableRow.setEnabled(true);
			}
		}

		// Lager ist voll, einkaufen nicht mehr nötig
		else if (stock.getCountOf(stringKey) == stock.getMaxValue()) {
			// Schaltfläche ausgrauen
			tableRow.setBackgroundColor(Color.GRAY);
			tableRow.setEnabled(false);
		}
		checkWishToShop();
	}

	private void checkWishToShop() {
		if(shoppingList.isEmpty()) {
			AbstractWish wish = model.getWishes().get(WishType.WishToShop);
			if(wish != null) {
				wish.fulfill();
				Toast.makeText(
						StockActivity.this, 
						"Wunsch erfüllt (" + Model.getInstance().getWishes().size() + " Wünsche übrig)", 
						Toast.LENGTH_SHORT)
						.show();
			}
		}
	}
	@Override
	protected void onResume() {
		Model.getInstance().inAppFocus = true;
		super.onResume();
	}
	@Override
	protected void onPause() {
		Log.i("Activity", "StockActivity onPause()");
		Model.getInstance().inAppFocus = false;
		super.onPause();
	}
}
